home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Apple II Magazines (DO)
/
Micro on the Apple Volume 1 (1981)(Micro Ink)[no boot].zip
/
Micro on the Apple Volume 1 (1981)(Micro Ink)[no boot].do
/
SPELUNKER.int
< prev
next >
Wrap
Text File
|
1996-12-24
|
12KB
|
346 lines
10 REM *************************
15 REM * *
20 REM * SPELUNKER *
25 REM * THOMAS R. MIMLITCH *
30 REM * *
35 REM * SPELUNKER *
40 REM * *
45 REM * COPYRIGHT (C) 1981 *
50 REM * MICRO INK, INC. *
55 REM * CHELMSFORD, MA 01824 *
60 REM * ALL RIGHTS RESERVED *
65 REM * *
70 REM *************************
75 REM
80 REM
100 GOTO 30000:REM TO INITIALIZE
1000 PRINT "?";:INPUT IN$:IN$( LEN(IN$)+1)=" GO N * ":I=1
1005 NOUN=0:VERB=0
1010 GOSUB 1500:GOSUB 1600:GOSUB 1700
1020 IF W3$#"* " THEN 1010
1050 NTYP=NTYP(NOUN):VTYP=VTYP(VERB)
1060 IF (VTYP MOD (NTYP*2))>=NTYP THEN 2000
1070 PRINT "ICH VERSTEHE NICHT"
1080 GOTO 3000
1200 GOTO 2000
1500 W3$="":S=0:FOR I=I TO LEN(IN$):IF S=0 THEN 1520:IF IN$(I,I)=" " THEN 1580:IF S=5 THEN 1560:GOTO 1540
1520 IF IN$(I,I)=" " THEN 1560
1540 S=S+1:W3$(S)=IN$(I,I)
1560 NEXT I
1580 IF S<5 THEN W3$(S+1)=SPC$(S+1)
1590 RETURN
1600 IF NOUN#0 THEN RETURN :FOR J=1 TO NUMN:IF W3$#NOUNS$(J*5-4,J*5) THEN NEXT J:IF J>=NUMN THEN RETURN :NOUN=J:W2$=W3$
1610 RETURN
1700 IF VERB#0 THEN RETURN :FOR J=1 TO NUMV:IF W3$#VERBS$(J*5-4,J*5) THEN NEXT J:IF J>NUMV THEN RETURN :VERB=J:W1$=W3$
1710 RETURN
2000 REM MOVE
2010 NLOC=0
2020 IF NOUN>8 THEN 2200
2030 IF (NOUN MOD 2)=1 THEN 2100
2040 IF LOC#11 AND LOC#8 THEN 1070
2100 GOTO 2100+NOUN*10
2110 NLOC=N(LOC):GOTO 2190
2120 NLOC=0:GOTO 2190
2130 NLOC=E(LOC):GOTO 2190
2140 NLOC=15:IF LOC=8 THEN NLOC=8:GOTO 2190
2150 NLOC=S(LOC):GOTO 2190
2160 NLOC=22:IF LOC=8 THEN NLOC=8:GOTO 2190
2170 NLOC=W(LOC):GOTO 2190
2180 NLOC=12:IF LOC=8 THEN NLOC=8:GOTO 2190
2190 IF RAFT=1 THEN NLOC=ABS (NLOC)
2191 RAFT=0:PLOC=LOC
2192 IF NLOC>0 THEN LOC=NLOC
2193 IF NLOC#12 THEN 2900
2194 IF M(50)<5 THEN 2900
2195 IF PLOC=6 THEN S(12)=0
2196 IF PLOC=11 THEN W(12)=0
2197 GOTO 2900
2200 IF (NOUN=9 OR NOUN=10) AND ROPE=0 THEN GOTO 1070
2205 IF NOUN#9 THEN 2250
2210 IF LOC#5 AND LOC#13 THEN 1070
2220 IF LOC=5 THEN LOC=4
2230 IF LOC=13 THEN LOC=50
2240 GOTO 3000
2250 IF NOUN#10 THEN 2300
2260 IF LOC#4 THEN 1070
2270 LOC=5:GOTO 3000
2300 IF VERB=8 OR VERB=11 THEN 2320:GOTO 2350
2320 IF NUMP=8 THEN 1070
2325 IF NOUN=34 AND (LOC=19 OR LOC=10 OR LOC=5 OR LOC=18 OR LOC=7 OR LOC=6 OR LOC=11) THEN 2345
2330 IF STA(NOUN)#LOC THEN 1070
2335 IF NOUN=28 AND M(50)>0 THEN 1070
2345 STA(NOUN)=-1:GOTO 3000
2350 IF VERB=9 OR VERB=10 OR VERB=14 THEN 2370:GOTO 2400
2370 IF STA(NOUN)#-1 THEN 1070
2380 STA(NOUN)=LOC
2383 IF NOUN#33 THEN 2420
2385 IF VERB#10 THEN STA(33)=0
2387 LIGHT=0
2390 GOTO 2420
2400 IF VERB#12 THEN 2900
2410 IF STA(NOUN)#-1 THEN 1070
2420 FOR WT=1 TO NUMW*5-4 STEP 5
2425 IF NOUN#WT(WT) THEN 2480
2430 FOR D=2 TO 4
2435 IF (STA(WT(WT+D)) MOD 100)#LOC THEN 2470
2440 FOR M=1 TO NUMM*10-9 STEP 10
2445 IF WT(WT+D)#M(M) THEN 2460
2446 HT= RND (WT(WT+1))/(CURSE+1)
2448 M(M+9)=M(M+9)-HT
2449 IF M(M+4)=0 THEN M(M+4)=1
2450 PRINT "ASSAULT ON ";NOUNS$(M(M)*5-4,M(M)*5);", ";HT;" UNITS"
2452 PRINT "ITS LIFE FORCE IS NOW ";M(M+9);"%"
2455 IF M(M+9)>0 THEN 2460
2456 PRINT NOUNS$(M(M)*5-4,M(M)*5);" HAS BEEN ELIMINATED"
2457 STA(M(M))=0
2460 NEXT M
2470 NEXT D
2480 NEXT WT
2490 IF NOUN#16 OR VERB=10 THEN 2500
2492 STA(16)=0:GOTO 2493+ RND (4)
2493 N(LOC)=0:GOTO 2500
2494 E(LOC)=0:GOTO 2500
2495 S(LOC)=0:GOTO 2500
2496 W(LOC)=0
2500 IF NTYP#32 THEN 2900
2510 IF NOUN#33 THEN 2520:IF VERB=12 THEN LIGHT=1:GOTO 2900
2520 IF NOUN#29 THEN 2530:RAFT=1:GOTO 2900
2530 IF NOUN#30 THEN 2540:ROPE=1:GOTO 2900
2540 REM
2900 IF NOUN<11 THEN ROPE=0
2910 IF STA(30)=LOC THEN ROPE=1
2920 IF LOC=12 THEN 3000
2930 W(12)=6:S(12)=11
3000 REM RE-ACTION
3010 FOR M=1 TO NUMM*10-9 STEP 10
3020 IF STA(M(M))#0 THEN GOSUB 3800
3030 NEXT M
3040 IF STA(35)=0 AND STA(34)=2 THEN STA(35)=2
3090 GOTO 4000
3800 REM MONS SUB
3802 MRM=STA(M(M)) MOD 100
3810 IF (STA(M(M+1)) MOD 100)=MRM AND M(M+4)=0 THEN 3900
3820 IF MRM=LOC THEN 3860
3830 M(M+2)=(M(M+2)+M(M+3)) MOD 6
3840 IF M(M+2)#0 THEN RETURN
3845 GOTO 3850+ RND (4)
3850 NLOC=N(MRM):GOTO 3855
3851 NLOC=E(MRM):GOTO 3855
3852 NLOC=S(MRM):GOTO 3855
3853 NLOC=W(MRM):GOTO 3855
3855 IF NLOC<1 THEN RETURN
3858 STA(M(M))=NLOC+STA(M(M))-MRM:RETURN
3860 M(M+4)=M(M+4)+1
3865 KP=(M(M+5)-(STA(M(M+1))=-1)*40+9*(M(M+4)-2))*M(M+9)/100+CURSE
3866 IF KP>60 THEN KP=60
3870 SAP=(M(M+6)+9*(M(M+4)-2))*M(M+9)/100+CURSE
3871 IF SAP>70 THEN SAP=70
3875 SRP=(M(M+7)+9*(M(M+4)-2))*M(M+9)/100+CURSE
3876 IF SRP>80 THEN SRP=80
3877 PRINT "ATTACK BY ";NOUNS$((M(M)-1)*5+1,M(M)*5)
3879 R1= RND (100):R2= RND (100):R3= RND (100)
3880 IF KP>R1 THEN 3920
3885 IF SAP>R2 THEN 3940
3887 IF STA(M(M+1))#-1 THEN RETURN
3890 IF SRP>R3 THEN 3960
3895 RETURN
3900 STA(M(M))=M(M+8)
3905 STA(M(M+1))=M(M+8)
3910 RETURN
3920 VTAB 23:TAB 1:PRINT "THE";NOUNS$((M(M)-1)*5+1,M(M)*5);"KILLED YOU!"
3924 PRINT KP,R1
3925 END
3940 FOR I=1 TO NUMN
3945 IF NTYP(I)=16 AND STA(I)=-1 THEN STA(I)=M(M+8)
3950 NEXT I
3957 PRINT "ALL YOUR REWARDS STOLEN"
3959 GOTO 3900
3960 PRINT "HE TOOK BACK HIS VALUABLE"
3965 GOTO 3900
4000 REM OUTPUT
4020 FOR I=3 TO 9:VTAB I:TAB 2:PRINT " ";:NEXT I
4060 GOTO 4000+100*LOC
4070 POKE 50,63:VTAB 3:TAB 2:PRINT LOC$;: POKE 50,255:PRINT " ";:RETURN
4090 VTAB 23:TAB 1
4095 IF LIGHT=1 OR LOC<3 OR LOC=19 THEN 9100
4097 PRINT "IT IS VERY DARK"
4099 GOTO 9100
4100 LOC$="MOUTH ":GOSUB 4070
4199 GOTO 4090
4200 LOC$="TREE ROOM ":GOSUB 4070
4299 GOTO 4090
4300 LOC$="WRITING ROOM":GOSUB 4070
4399 GOTO 4090
4400 LOC$="PIT ":GOSUB 4070
4499 GOTO 4090
4500 LOC$="SOUTH LAKE ":GOSUB 4070
4599 GOTO 4090
4600 LOC$="WEST LAKE ":GOSUB 4070
4699 GOTO 4090
4700 LOC$="NORTH LAKE ":GOSUB 4070
4799 GOTO 4090
4800 LOC$="MAZE ROOM ":GOSUB 4070
4899 GOTO 4090
4900 LOC$="FROZEN RIVER":GOSUB 4070
4999 GOTO 4090
5000 LOC$="RIVER ROOM ":GOSUB 4070
5099 GOTO 4090
5100 LOC$="HUB ROOM ":GOSUB 4070
5199 GOTO 4090
5200 LOC$="ICE ROOM ":GOSUB 4070
5299 GOTO 4090
5300 LOC$="CHIMNEY ":GOSUB 4070
5399 GOTO 4090
5400 LOC$="GOLD ROOM ":GOSUB 4070
5499 GOTO 4090
5500 LOC$="BONES ":GOSUB 4070
5510 IF STA(35)#-1 THEN CURSE=CURSE+15
5599 GOTO 4090
5600 LOC$="BATS ":GOSUB 4070
5699 GOTO 4090
5700 LOC$="GHOST ROOM ":GOSUB 4070
5799 GOTO 4090
5800 LOC$="MISTY LAKE ":GOSUB 4070
5899 GOTO 4090
5900 LOC$="SWIFT RIVER ":GOSUB 4070
5999 GOTO 4090
6000 LOC$="INTERSECTION":GOSUB 4070
6099 GOTO 4090
6100 GOTO 6000
6200 GOTO 6000
6999 GOTO 4090
8900 LOC$="OVER FALLS ":GOSUB 4070
8910 VTAB 23:TAB 1:GOTO 9090
9000 LOC$="YOUR HOME ":GOSUB 4070
9005 AMT=0
9010 IF STA(25)=-1 THEN AMT=AMT+13
9020 IF STA(26)=-1 THEN AMT=AMT+22
9030 IF STA(27)=-1 THEN AMT=AMT+8
9040 IF STA(28)=-1 THEN AMT=AMT+5
9050 VTAB 23:TAB 1
9060 IF AMT=0 THEN 9090
9070 PRINT "YOU HAVE FOUND $";AMT;","; RND (900)+100;" IN TREASURES"
9080 IF AMT>13 THEN PRINT "NICE SPELUNKING!"
9090 PRINT "GOOD-BYE"
9099 END
9100 FOR I=2 TO 10:VTAB I:TAB 30:PRINT " ":NEXT I
9105 IF LIGHT=0 AND LOC>2 AND LOC#19 THEN 9290
9110 VTAB 5:TAB 33:PRINT "^":TAB 33:PRINT "+": POKE 50,63
9140 IF N(LOC)=0 OR (N(LOC)<0 AND RAFT=0) THEN 9150:VTAB 3:TAB 33:PRINT "N":TAB 33:PRINT " "
9150 IF S(LOC)=0 OR (S(LOC)<0 AND RAFT=0) THEN 9160:VTAB 8:TAB 33:PRINT " ":TAB 33:PRINT "S"
9160 IF E(LOC)=0 OR (E(LOC)<0 AND RAFT=0) THEN 9170:VTAB 6:TAB 35:PRINT " E"
9170 IF W(LOC)=0 OR (W(LOC)<0 AND RAFT=0) THEN 9180:VTAB 6:TAB 30:PRINT "W "
9180 IF (LOC=5 OR LOC=13) AND ROPE=1 THEN 9185:GOTO 9190
9185 VTAB 2:TAB 33:PRINT "UP"
9190 IF LOC#4 OR ROPE=0 THEN 9200
9195 VTAB 10:TAB 33:PRINT "DOWN"
9200 IF LOC=11 OR LOC=8 THEN 9210:GOTO 9290
9210 VTAB 3:TAB 30:PRINT "N ":TAB 30:PRINT " W"
9215 IF LOC#8 THEN 9220:VTAB 3:TAB 35:PRINT " E":TAB 35:PRINT "N "
9220 VTAB 8:TAB 30:PRINT " W";:TAB 35:PRINT "S ":TAB 30:PRINT "S ";:TAB 35:PRINT " E"
9290 POKE 50,255
9300 IF LIGHT=0 AND LOC>2 AND LOC#19 THEN 9400
9305 VTAB 5:TAB 2:J=0
9310 FOR I=1 TO NUMN-1
9320 IF (STA(1) MOD 100)#LOC THEN 9360
9330 PRINT NOUNS$((I-1)*5+1,I*5);" ";
9340 J=(J+1) MOD 4:IF J#0 THEN 9360
9350 PRINT "<CTRL-G>":TAB 2
9360 NEXT I
9400 VTAB 13:TAB 2:FOR I=1 TO 12:PRINT " ";:NEXT I
9410 VTAB 13:TAB 2:PRINT "POSSESSIONS ";:NUMP=0
9420 FOR I=1 TO NUMN-1
9430 IF STA(I)>=0 THEN 9480
9440 PRINT NOUNS$((I-1)*5+1,I*5);" ";
9450 NUMP=NUMP+1:IF NUMP=4 THEN TAB 14
9480 NEXT I
9900 VTAB 23:TAB 1:GOTO 1000
30000 REM INITIALIZE ROUTINE
30010 DIM IN$(40),NOUNS$(255),VERBS$(255),W1$(5),W2$(5),W3$(5),NTYP(50),VTYP(50),STA(50)
30020 DIM N(50),E(50),S(50),W(50)
30030 TEXT :CALL -936
30040 DIM LOC$(26),SPC$(5),M(6*10)
30050 SPC$=" "
30060 NUMW=6
30065 DIM WT(5*NUMW)
30070 LOC=1
30100 REM INITIALIZE VARIABLES
30101 REM SHOULD BE READ AND DATA STMTS
30110 NOUNS$( LEN(NOUNS$)+1)="N NE E SE S SW W NW UP DOWN "
30120 NOUNS$( LEN(NOUNS$)+1)="CAVE LAKE RIVERTREE "
30130 NOUNS$( LEN(NOUNS$)+1)="AX BOMB CURSEFIRE KNIFE"
30140 NOUNS$( LEN(NOUNS$)+1)="CLAM BATS BONESGHOSTOGRE "
30150 NOUNS$( LEN(NOUNS$)+1)="CHESTGOLD PEARLLAMP "
30160 NOUNS$( LEN(NOUNS$)+1)="RAFT ROPE TENT TRUCKLIGHT"
30170 NOUNS$( LEN(NOUNS$)+1)="WATERAPPLEICE "
30195 NOUNS$( LEN(NOUNS$)+1)="*****"
30199 NUMN=37
30210 VERBS$( LEN(VERBS$)+1)="GO JUMP RUN WALK DRIVECLIMB"
30220 VERBS$( LEN(VERBS$)+1)="DIG "
30230 VERBS$( LEN(VERBS$)+1)="CARRYDROP PUT TAKE USE HIT FIGHT"
30240 VERBS$( LEN(VERBS$)+1)="HELP KILL STOP HIT FIGHT"
30250 VERBS$( LEN(VERBS$)+1)="RUB "
30260 VERBS$( LEN(VERBS$)+1)="STARTDRIVE"
30270 VERBS$( LEN(VERBS$)+1)="DRINKEAT BITE "
30295 VERBS$( LEN(VERBS$)+1)="*****"
30299 NUMV=26
30310 FOR I=1 TO 10:NTYP(I)=1:NEXT I
30320 FOR I=11 TO 14:NTYP(I)=2:NEXT I
30330 FOR I=15 TO 19:NTYP(I)=4:NEXT I
30340 FOR I=20 TO 24:NTYP(I)=8:NEXT I
30350 FOR I=25 TO 28:NTYP(I)=16:NEXT I
30360 FOR I=29 TO 33:NTYP(I)=32:NEXT I
30370 FOR I=34 TO 35:NTYP(I)=64:NEXT I
30380 NTYP(36)=32
30410 FOR I=1 TO 6:VTYP(I)=1:NEXT I
30412 VTYP(2)=11:VTYP(6)=3
30420 VTYP(7)=2
30430 FOR I=8 TO 11:VTYP(I)=116:NEXT I
30432 VTYP(12)=36:VTYP(13)=36:VTYP(14)=4
30440 FOR I=15 TO 19:VTYP(I)=8:NEXT I
30442 VTYP(17)=40
30450 VTYP(20)=16
30460 FOR I=21 TO 22:VTYP(I)=32:NEXT I
30470 FOR I=23 TO 25:VTYP(I)=64:NEXT I
30500 FOR I=1 TO 14:STA(I)=0:NEXT I
30510 STA(15)=4:STA(16)=3:STA(17)=15
30520 STA(18)=13:STA(19)=1:STA(20)=18
30530 STA(21)=16:STA(22)=15:STA(23)=17
30540 STA(24)=14:STA(25)=16:STA(26)=14
30550 STA(27)=18:STA(28)=12:STA(29)=5
30560 STA(30)=9:STA(31)=1:STA(32)=1
30570 STA(33)=1:STA(34)=0:STA(35)=0
30580 STA(36)=12
30600 FOR I=1 TO 50:N(I)=0:E(I)=0:S(I)=0:W(I)=0:NEXT I
30610 N(1)=50:N(3)=2:N(5)=-18:N(7)=9:N(8)=8:N(9)=7
30620 N(10)=3:N(11)=13:N(16)=22:N(18)=7
30630 N(19)=1:N(20)=8:N(22)=11
30640 E(2)=1:E(4)=20:E(6)=-18:E(8)=9:E(9)=1:E(11)=14:E(17)=21:E(20)=3
30650 E(21)=11
30660 S(1)=19:S(2)=3:S(3)=10:S(7)=-18:S(8)=8:S(10)=-11:S(11)=-49:S(12)=11:S(13)=11:S(18)=5
30670 S(21)=22:S(22)=16
30680 W(1)=2:W(3)=20:W(6)=12:W(8)=20:W(9)=8:W(11)=21
30690 W(12)=6:W(14)=11:W(15)=11:W(18)=6:W(20)=4:W(21)=17:W(22)=21
30700 POKE 50,63
30710 VTAB 24:GOSUB 31999:VTAB 1:GOSUB 31999:VTAB 11:GOSUB 31999:VTAB 16:GOSUB 31999
30720 VTAB 2:TAB 1
30730 FOR I=2 TO 23:PRINT " ";:TAB 29:IF I<11 THEN PRINT " ";:TAB 39:PRINT " ":NEXT I
30740 POKE 50,255: POKE 32,1: POKE 33,37: POKE 34,16: POKE 35,23:VTAB 17:TAB 2
30800 FOR I=1 TO 60:M(I)=0:NEXT I
30810 M(1)=24:M(2)=26:M(4)=2:M(6)=60:M(7)=30:M(8)=55:M(9)=14:M(10)=100
30820 M(11)=21:M(12)=25:M(14)=4:M(16)=60:M(17)=40:M(18)=90:M(19)=16:M(20)=40
30830 M(21)=23:M(24)=6:M(29)=17:M(30)=50
30840 M(31)=20:M(32)=27:M(33)=1:M(36)=90:M(37)=60:M(38)=65:M(39)=18:M(40)=60
30850 M(41)=36:M(42)=28:M(43)=1:M(47)=60:M(49)=12:M(50)=25
30860 M(51)=22:M(53)=1:M(59)=15:M(60)=75
30890 NUMM=6
30900 WT(1)=15:WT(2)=100:WT(3)=24:WT(4)=0:WT(5)=0
30910 WT(6)=16:WT(7)=150:WT(8)=24:WT(9)=22:WT(10)=36
30920 WT(11)=18:WT(12)=30:WT(13)=21:WT(14)=22:WT(15)=36
30930 WT(16)=19:WT(17)=50:WT(18)=24:WT(19)=20:WT(20)=0
30940 WT(21)=33:WT(22)=30:WT(23)=23:WT(24)=0:WT(25)=0
30950 WT(26)=36:WT(27)=40:WT(28)=21:WT(29)=0:WT(30)=0
30999 GOTO 4000
31999 TAB 1:PRINT " ";:RETURN
32000 PRINT ( PEEK (202)+ PEEK (203)*256)-( PEEK (204)+ PEEK (205)*256):END